if (trackerItem.get_is_separator()) {
let mapper = new RemoteMenuSeparatorItemMapper(trackerItem);
item = mapper.menuItem;
+ } else if (trackerItem.get_has_submenu()) {
+ let mapper = new RemoteMenuSubmenuItemMapper(trackerItem);
+ item = mapper.menuItem;
} else {
let mapper = new RemoteMenuItemMapper(trackerItem);
item = mapper.menuItem;
},
});
+const RemoteMenuSubmenuItemMapper = new Lang.Class({
+ Name: 'RemoteMenuSubmenuItemMapper',
+
+ _init: function(trackerItem) {
+ this._trackerItem = trackerItem;
+ this.menuItem = new PopupMenu.PopupSubMenuMenuItem('');
+ this._trackerItem.connect('notify::label', Lang.bind(this, this._updateLabel));
+ this._updateLabel();
+
+ this._tracker = Shell.MenuTracker.new_for_item_submenu(this._trackerItem,
+ _insertItem.bind(null, this.menuItem.menu),
+ _removeItem.bind(null, this.menuItem.menu));
+
+ this.menuItem.connect('destroy', function() {
+ trackerItem.run_dispose();
+ });
+ },
+
+ destroy: function() {
+ this._tracker.destroy();
+ this.parent();
+ },
+
+ _updateLabel: function() {
+ this.menuItem.label.text = stripMnemonics(this._trackerItem.label);
+ },
+});
+
const RemoteMenuItemMapper = new Lang.Class({
Name: 'RemoteMenuItemMapper',
return tracker;
}
+ShellMenuTracker *
+shell_menu_tracker_new_for_item_submenu (GtkMenuTrackerItem *item,
+ ShellMenuTrackerInsertFunc insert_func,
+ gpointer insert_user_data,
+ GDestroyNotify insert_notify,
+ ShellMenuTrackerRemoveFunc remove_func,
+ gpointer remove_user_data,
+ GDestroyNotify remove_notify)
+{
+ ShellMenuTracker *tracker = g_slice_new0 (ShellMenuTracker);
+
+ tracker->ref_count = 1;
+ tracker->insert_func = insert_func;
+ tracker->insert_user_data = insert_user_data;
+ tracker->insert_notify = insert_notify;
+ tracker->remove_func = remove_func;
+ tracker->remove_user_data = remove_user_data;
+ tracker->remove_notify = remove_notify;
+
+ tracker->tracker = gtk_menu_tracker_new_for_item_submenu (item,
+ shell_menu_tracker_insert_func,
+ shell_menu_tracker_remove_func,
+ tracker);
+
+ return tracker;
+}
+
ShellMenuTracker *
shell_menu_tracker_ref (ShellMenuTracker *tracker)
{
ShellMenuTrackerRemoveFunc remove_func,
gpointer remove_user_data,
GDestroyNotify remove_notify);
+ShellMenuTracker * shell_menu_tracker_new_for_item_submenu (GtkMenuTrackerItem *item,
+ ShellMenuTrackerInsertFunc insert_func,
+ gpointer insert_user_data,
+ GDestroyNotify insert_notify,
+ ShellMenuTrackerRemoveFunc remove_func,
+ gpointer remove_user_data,
+ GDestroyNotify remove_notify);
+
ShellMenuTracker * shell_menu_tracker_ref (ShellMenuTracker *tracker);
void shell_menu_tracker_unref (ShellMenuTracker *tracker);
void shell_menu_tracker_destroy (ShellMenuTracker *tracker);